package com.quyunshuo.module.home.navigation

import android.content.Context
import android.util.AttributeSet
import android.view.View
import android.view.WindowInsets
import android.widget.FrameLayout

/**
 * 处理Navigation重建问题
 */
class WindowFrameLayout(context: Context, attributeSet: AttributeSet? = null, defStyle: Int = 0) :
    FrameLayout(context, attributeSet, defStyle) {


    /**
     * 重写添加子视图方法，确保每次添加新视图时请求应用窗口插入
     */
    override fun addView(child: View?) {
        super.addView(child)
        // 请求重新应用窗口插入，确保新添加的子视图能立即处理插入
        requestApplyInsets()
    }

    /**
     * 分发窗口插入到所有子视图
     * @param insets 包含系统栏位（状态栏、导航栏等）的尺寸信息
     * @return 最终消费后的窗口插入对象
     */
    override fun dispatchApplyWindowInsets(insets: WindowInsets?): WindowInsets {
        // 先执行默认的分发逻辑
        var windowInsets = super.dispatchApplyWindowInsets(insets)

        // 如果插入信息未被完全消费（系统栏位仍有空间需要处理）
        if (insets?.isConsumed == false) {
            // 遍历所有子视图进行手动分发
            val count = childCount
            for (i in 0 until count) {
                // 将窗口插入传递给每个子视图，并更新返回值
                windowInsets = getChildAt(i).dispatchApplyWindowInsets(insets)
            }
        }
        return windowInsets
    }
}